package com.example.springdata.lambda;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Stream;

public class TestHeroLambda {
    private static void filter(List<Hero> heros){
        for(Hero hero:heros){
            if(hero.getHp()>100&&hero.getDamage()<50){
                System.out.println(hero.toString());
            }
        }
    }
    private static void filter2(List<Hero> heros,HeroCheck check){
        for(Hero hero:heros){
            if(check.check(hero)){
                System.out.println(hero);
            }
        }
    }
    public boolean testCheck(Hero h){
        return h.getHp()>100&&h.getDamage()<50;
    }


    public static void main(String[] args) {
        Random r=new Random();
        List<Hero> heros=new ArrayList<>();
        for(int i=0;i<10;i++){
            heros.add(new Hero("Hero"+i,r.nextInt(1000),r.nextInt(100)));
        }
        System.out.println("初始化后的集合:");
        System.out.println(heros);
//        System.out.println("过滤后的集合:");
//        filter(heros);
//        System.out.println("采用匿名类的过滤:");
//        HeroCheck check=new HeroCheck() {
//            @Override
//            public boolean check(Hero hero) {
//                if(hero.getHp()>100&&hero.getDamage()<50){
//                    return true;
//                }
//                return false;
//            }
//        };
//        filter2(heros,check);
//        System.out.println("Lambda过滤：");
//        filter2(heros,h->(h.getHp()>100&&h.getDamage()<50));
//        System.out.println("使用类的对象方法");
//        TestHeroLambda test=new TestHeroLambda();
//        filter2(heros,test::testCheck);

//        filter2(heros,Hero::matched);
//        filter2(heros,s->s.matched());
        System.out.println("stream过滤后结果:");
//        heros.stream().filter(h->h.getHp()>100&&h.getDamage()<50).forEach(h->System.out.println(h));
//        Hero[] arrayHeros=heros.toArray(new Hero[heros.size()]);
//        Stream.of(arrayHeros).forEach(vo->{
//            System.out.println(vo);
//        });
        heros.forEach(vo->{
            System.out.println(vo);
        });
        System.out.println(
                "对比后的结果:"
        );
//        heros.stream().distinct().map(h->h.getName()+"-"+h.getHp()).forEach(vo->{
//            System.out.println(vo);
//        });
//        Hero h=heros.stream().findFirst().get();
//        System.out.println("h="+h);
//        System.out.println(heros.stream().count());
        heros.stream().sorted((h1,h2)->h1.getHp()>h2.getHp()?-1:1).limit(3).forEach(vo->{
            System.out.println(vo);
        });
         Hero h=heros.stream().sorted((h1,h2)->h1.getHp()>h2.getHp()?-1:1).limit(3)
                 .min((h1,h2)->h1.getHp()>h2.getHp()?1:-1).get();
        System.out.println("h="+h);
    }
}
